iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
自我挑戰組

用 C/C++ 或 Rust 刷 Leetcode系列 第 25

「單調堆疊」: 739. Daily Temperatures

  • 分享至 

  • xImage
  •  

今天繼續加深「單調堆疊」的概念

739. Daily Temperatures
題目
給一個表示每日溫度整數陣列,其中answer[i]是在第i天之後您必須等待的天數才能獲得較溫暖的溫度。如果未來沒有一天可以這樣做,則保留 answer[i] == 0。

想法:
使用單調遞減堆疊 (堆疊頂部的值最小,底部最大),存放於 stack 裡的值都是還尚寫入結果的,倘若預到天氣的比 stack 裡的所有天的天氣都還要熱,就一一將較冷的天數從 stack 中彈出,再計算與當前天數的差值後,寫入結果陣列裡。

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temperatures) {
        int n = temperatures.size(); 
        stack<pair<int, int>> st; // temperature, index
        vector<int> res(n);
        for (int i = 0; i < n; i++) {
            int v = temperatures[i];
            while (!st.empty() && v > st.top().first) {
                pair<int, int> p = st.top();
                st.pop();
                res[p.second] = i - p.second;
            }
            st.push({v, i});
        }
        
        return res;
    }
};

時間複雜度: O(N)


上一篇
「單調堆疊」: 496. Next Greater Element I
下一篇
「遞迴」: 46. Permutations, 77. combinations 與 62. Unique Paths
系列文
用 C/C++ 或 Rust 刷 Leetcode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言